package rs.ac.uns.ftn.informatika.mbs2.e11031.etaksi.servlet;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import rs.ac.uns.ftn.informatika.mbs2.e11031.etaksi.entitet.Korisnik;

public class AutorizacioniFilter implements Filter {

	private String prijavnaStranica = null;

	public void init(FilterConfig cfg) throws ServletException {
		// postavljanje naziva stranice za prijavu
		prijavnaStranica = cfg.getInitParameter("prijavna-stranica");
		if (prijavnaStranica == null)
			throw new ServletException(
					"AutorizacioniFilter: nedostaje inicijalni parametar 'prijavna-stranica'");
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws ServletException, IOException {

		HttpServletRequest req = (HttpServletRequest) request;
		// ako zahtevamo prijavnu stranu ili prijavni servlet, samo
		// prosledjujemo zahtev dalje
		if (req.getRequestURI().toLowerCase().indexOf("prijava") != -1
				|| req.getRequestURI().toLowerCase().indexOf("registracija") != -1) {
			chain.doFilter(request, response);
		} else {
			HttpSession session = req.getSession();
			// sesija nije kreirana, predji na prijavnu stranu
			if (session == null) {
				request.getRequestDispatcher(prijavnaStranica).forward(request,
						response);
			} else {
				// sesija postoji
				// postavi podeseni jezik u sesiju
				if (session.getAttribute("jezik") == null)
					session.setAttribute("jezik", "sr_RS");

				Korisnik korisnik = (Korisnik) session.getAttribute("korisnik");
				if (korisnik == null || korisnik.getKorisnickoIme() == null) {
					request.getRequestDispatcher(prijavnaStranica).forward(
							request, response);
				} else {
					chain.doFilter(request, response);
				}
			}
		}
	}

	@Override
	public void destroy() {

	}

}
